#include <stdio.h>
#include <stdlib.h>

#define SIZE 9

// 将数组元素封装成 key
typedef struct Element{
    int key;
}* Element;

// 利用数组实现哈希表
typedef struct HashTable{
    Element* table;
}* HashTable;

/**
 * 哈希函数，计算对应的哈希值
 */
int hash(int key) {
    return key % SIZE;
}

// 初始化哈希表
void init(HashTable hashTable) {
    hashTable->table = malloc(sizeof (struct Element) * SIZE);
    for(int i = 0; i < SIZE; i++) {
        hashTable->table[i] = NULL;
    }
}

// 往哈希表中插入元素（此处暂未考虑装满的情况）
void put(HashTable hashTable, Element element) {
    // 计算哈希值
    int hashCode = hash(element->key);
    // 对号入座
    hashTable->table[hashCode] = element;
}

// 查找
int get(HashTable hashTable, int key) {
    int hashCode = hash(key);
    if(hashTable->table[hashCode]->key == key) {
        return 1;
    }
    return 0;
}

// 创建一个新元素
struct Element* createElement(int key) {
    struct Element* element = malloc(sizeof(struct Element));
    element->key = key;
    return element;
}

int main() {
    struct HashTable hashTable;
    init(&hashTable);
    put(&hashTable, createElement(10));
    put(&hashTable, createElement(7));
    put(&hashTable, createElement(13));
    put(&hashTable, createElement(29));

    printf("%d\n", get(&hashTable, 1));
    printf("%d", get(&hashTable, 7));

}


